/**
 * ESLint 配置文件
 * 采用扁平配置格式 (Flat Config)，适用于 Vue 3 + TypeScript 项目
 *
 * 主要功能：
 * - 提供 Vue 3 组件的语法检查
 * - 提供 TypeScript 代码的类型和语法检查
 * - 配置测试相关代码的检查规则（Vitest 和 Playwright）
 * - 集成 Oxlint 高性能检查
 * - 与 Prettier 格式化工具兼容
 */

// 导入 ESLint 核心功能
import { globalIgnores } from 'eslint/config'

// 导入 Vue + TypeScript 配置相关模块
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'

// 导入所需的 ESLint 插件
import pluginVue from 'eslint-plugin-vue'       // Vue 语法检查插件
import pluginVitest from '@vitest/eslint-plugin'  // Vitest 测试框架规则插件
import pluginPlaywright from 'eslint-plugin-playwright'  // Playwright 测试框架规则插件
import pluginOxlint from 'eslint-plugin-oxlint'  // Oxlint 高性能检查插件
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'  // 跳过格式化检查的规则

// 高级配置：允许在 .vue 文件中使用更多语言（当前已注释）
// 如需启用，取消下面三行的注释，并根据需要调整支持的语言
// import { configureVueProject } from '@vue/eslint-config-typescript'
// configureVueProject({ scriptLangs: ['ts', 'tsx'] })
// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup

// 导出 ESLint 配置
export default defineConfigWithVueTs(
  // 配置需要检查的文件类型
  {
    name: 'app/files-to-lint',
    files: ['**/*.{ts,mts,tsx,vue}'],  // 检查 TypeScript 和 Vue 文件
  },

  // 全局忽略规则：指定哪些文件或目录不进行检查
  globalIgnores([
    '**/dist/**',       // 忽略构建输出目录
    '**/dist-ssr/**',   // 忽略 SSR 构建输出目录
    '**/coverage/**'    // 忽略测试覆盖率报告目录
  ]),

  // Vue 基础规则配置
  pluginVue.configs['flat/essential'],

  // TypeScript 推荐规则配置
  vueTsConfigs.recommended,

  // Vitest 测试框架规则配置
  {
    ...pluginVitest.configs.recommended,
    files: ['src/**/__tests__/*'],  // 仅应用于测试文件
  },

  // Playwright 测试框架规则配置
  {
    ...pluginPlaywright.configs['flat/recommended'],
    files: ['e2e/**/*.{test,spec}.{js,ts,jsx,tsx}'],  // 仅应用于 E2E 测试文件
  },

  // Oxlint 高性能检查规则配置
  ...pluginOxlint.configs['flat/recommended'],

  // 跳过与 Prettier 相关的格式化检查规则
  // 确保 ESLint 只负责语法和质量检查，格式化由 Prettier 单独处理
  skipFormatting,
)
